python3小白课:类的继承和多继承
继承也是面向对象的三大特征之一,它是软件实现复用的重要手段,所以一定要学好,在python中,类可以直接继承自其它的0个到多个类。
继承的语法如下:
class 子类类名(父类类名1, 父类类名2, ...):
# 下面是类定义的部分
对比类的定义,其实继承很简单,就是在类名后面加上括号,里面写上继承自哪些父类即可。继承后,可以拥有父类的各种方法等,无需再重新定义一次,很方便,这样可以实现复用。
[!tip]
之前的课程中我们学习的类的定义都是没有定义父类的,他们都有一个默认的父类
object,所以object类是所有类的父类。
接下来我们来看一个简单的例子:
# coding:utf-8
class Fruit:
def info(self):
print("我是一个水果,我的颜色是%s" % self.color)
class Food:
def taste(self):
print("我是一种食物,不同的食物味道不同")
class Banana(Fruit, Food):
pass
# 创建Banana香蕉对象并使用
b = Banana()
b.color = "yellow"
# 调用实例方法
b.info()
b.taste()
我们运行后会发现,即使我们对Banana这个类里面啥都没有定义,但因为它是继承自水果、食物这俩父类,所以可以赋值里面的实例变量,也可以调用父类里面的方法,这就是类的继承在python中的小例子。
[!danger]
需要注意的是,很多其他编程语言不支持多继承,而python是支持的,在没有必要的情况下,尽量使用单父类继承,这样逻辑比较清晰,也不容易出现莫名其妙的错误。
你还需要想到的一点是,如果进行多继承时,多个父类之中有同名方法怎么办?事实是,排在前面的父类中的方法会屏蔽排在后面的父类中的同名方法。我们来看个小例子:
# coding:utf-8
class Fruit:
def info(self):
print("我是一个水果,我的颜色是%s" % self.color)
class Food:
def info(self):
print("我是一种食物,不同的食物味道不同")
class Banana(Fruit, Food):
pass
# 创建Banana香蕉对象并使用
b = Banana()
b.color = "yellow"
# 调用实例方法
b.info()
可以看到,虽然我们继承的两个父类都有info这个方法但是因为顺序原因,后面的那一个info方法并没有被执行。
[!danger]
上述的例子都是最终继承下来的子类是不定义任何方法的,事实上,我们也可以在子类中定义子类特有的方法,比如香蕉相比水果和食物,可能还有自己的特性,比如需要剥皮来吃等,这样可以在子类中定义自己的特有方法,而不影响父类。这一点我们就不展开讲了,你理解成子类可以扩展(extend)父类即可。
单词释义
| 单词 | 释义 |
|---|---|
| object | 对象 |
| Fruit | 水果 |
| Food | 食物 |
| color | 颜色 |
| taste | 味道,滋味 |
| Banana | 香蕉 |
| yellow | 黄色 |
| extend | 扩展 |